package cn.xuchunh.other;

/**
 * 折纸
 *
 * @author yehui
 * @date 2021/2/8
 */
public class FoldPaper {

    /**
     * 请把纸条竖着放在桌子上，然后从纸条的下边向上方对折，压出折痕后再展 开。此时有1条折痕，突起
     * 的方向指向纸条的背面这条折痕叫做“下”折痕 ；突起的⽅向指向纸条正面的折痕叫做“上”折痕。
     * 如果每次都从下边向上方对折，对折N次。请从上到下计算出所有折痕的方向。
     * 给定折的次数n,请返回从上到下的折痕的数组，若为下折痕则对应元素为"down",若为上折痕则为"up".
     *
     * @param n 折纸的次数
     * @return 从上往下的折痕方向
     */
    public String[] foldPaper(int n) {
        // write code here
        if (n < 1) {
            return null;
        }
        if (n == 1) {
            return new String[]{"down"};
        }
        int length = (int) (Math.pow(2, n) - 1);
        String[] result = new String[length];
        String[] temp = foldPaper(n - 1);
        int i;
        for (i = 0; i < temp.length; i++) {
            result[i] = temp[i];
        }
        result[i] = "down";
        int j = i + 1;
        for (i = temp.length - 1; i >= 0; i--, j++) {
            result[j] = "down".equals(temp[i]) ? "up" : "down";
        }
        return result;
    }

}
